package com.macro.mall.service;

import com.macro.mall.dto.UmsAdminParam;
import com.macro.mall.dto.UpdateAdminPasswordParam;
import com.macro.model.UmsAdmin;
import com.macro.model.UmsPermission;
import com.macro.model.UmsResource;
import com.macro.model.UmsRole;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

public interface UmsAdminService {

    /**
     *  获取一个用户
     * @param username
     * @return
     */
    UmsAdmin getUmsAdminByName(String username);

    /**
     *  注册
     * @param umsAdminParam
     * @return
     */
    UmsAdmin register(UmsAdminParam umsAdminParam);

    /**
     *  登录功能
     * @param username
     * @param password
     * @return JWT Token字符串
     */
    String login(String username,String password);


    /**
     *  刷新Token
     * @param oldToken
     * @return
     */
    String refreshToken(String oldToken);


    /**
     *  根据id获取用户
     * @param id
     * @return
     */
    UmsAdmin getItemById(Long id);

    /**
     *  根据用户名或者昵称分页查询数据
     */
    List<UmsAdmin> list(String keyword,Integer pageNumber,Integer pageSize);

    /**
     *  修改用户信息
     */
    int update(Long id,UmsAdmin admin);

    /**
     * 删除指定用户
     */
    int delete(Long id);

    /**
     * 修改用户角色关系
     */
    @Transactional
    int updateRole(Long adminId,List<Long> roleIds);

    /**
     * 获取用户对应的角色信息
     */
    List<UmsRole> getRoleList(Long adminId);

    /**
     * 获取指定用户的可访问资源
     */
    List<UmsResource> getResourceList(Long adminId);

    /**
     * 修改用户的+-权限
     */
    @Transactional
    int updatePermission(Long adminId, List<Long> permissionIds);

    /**
     * 获取用户所有权限（包括角色权限和+-权限）
     */
    List<UmsPermission> getPermissionList(Long adminId);

    /**
     * 修改密码
     */
    int updatePassword(UpdateAdminPasswordParam updatePasswordParam);

    /**
     * 获取用户信息
     */
    UserDetails loadUserByUsername(String username);
}
